package concurrency.basicthreading.demo;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * Thread.sleep() 和 TimeUnit.MILLISECONDS.sleep() 方法让当前线程休眠。这使得线程调度器可以切换到另一个线程。
 * 但我们不能依赖于sleep来控制线程的先后执行顺序。因为顺序行为依赖于底层的线程机制，不同的操作系统之间是有差异的。
 * 如果必须控制线程的执行顺序，最好使用同步机制。
 */
public class Demo04Sleeping implements Runnable {

	public static void main(String[] args) {
		ExecutorService exec = Executors.newCachedThreadPool();
		for (int i = 0; i < 5; i++) {
			exec.execute(new Demo04Sleeping());
		}
		exec.shutdown();
	}

	@Override
	public void run() {
		int i = 100;
		try {
			while (i-- > 0) {
				System.out.println("#" + Thread.currentThread().getId() + ":" + i);
				TimeUnit.MILLISECONDS.sleep(100);
			}
		} catch (InterruptedException ex) {
		
		}
	}

}
